/*
 * Copyright 2018 JDCLOUD.COM
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http:#www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * 镜像
 * 关于主机镜像操作的相关接口
 *
 * OpenAPI spec version: v1
 * Contact: 
 *
 * NOTE: This class is auto generated by the jdcloud code generator program.
 */


using System;
using System.Collections.Generic;
using System.Text;
using JDCloudSDK.Core.Service;

using JDCloudSDK.Core.Annotation;
using Newtonsoft.Json;

namespace  JDCloudSDK.Vm.Apis
{

    /// <summary>
    ///  
        ///         /// 查询镜像信息列表。
        ///         /// 
        ///         /// 详细操作说明请参考帮助文档：[镜像概述](https://docs.jdcloud.com/cn/virtual-machines/image-overview)
        ///         /// 
        ///         /// ## 接口说明
        ///         /// - 通过此接口可以查询到京东云官方镜像、第三方镜像、镜像市场、私有镜像、或其他用户共享给您的镜像。
        ///         /// - 请求参数即过滤条件，每个条件之间的关系为逻辑与（AND）的关系。
        ///         /// - 如果使用子帐号查询，只会查询到该子帐号有权限的镜像。关于资源权限请参考 [IAM概述](https://docs.jdcloud.com/cn/iam/product-overview)。
        ///         /// - 单次查询最大可查询100条镜像信息。
        ///         /// - 尽量一次调用接口查询多条数据，不建议使用该批量查询接口一次查询一条数据，如果使用不当导致查询过于密集，可能导致网关触发限流。
        ///         /// - 由于该接口为 &#x60;GET&#x60; 方式请求，最终参数会转换为 &#x60;URL&#x60; 上的参数，但是 &#x60;HTTP&#x60; 协议下的 &#x60;GET&#x60; 请求参数长度是有大小限制的，使用者需要注意参数超长的问题。
        ///         /// 
    /// </summary>
    public class DescribeImagesRequest : JdcloudRequest
    {
        ///<summary>
        /// 镜像来源，如果没有指定 &#x60;ids&#x60; 参数，此参数必传。取值范围：
        /// &#x60;public&#x60;：官方镜像。
        /// &#x60;thirdparty&#x60;：镜像市场镜像。
        /// &#x60;private&#x60;：用户自己的私有镜像。
        /// &#x60;shared&#x60;：其他用户分享的镜像。
        /// &#x60;community&#x60;：社区镜像。
        /// 
        ///</summary>
        public   string ImageSource{ get; set; }
        ///<summary>
        /// 查询已经下线的镜像时使用。
        /// 只有查询 &#x60;官方镜像&#x60; 或者 &#x60;镜像市场镜像&#x60; 时，此参数才有意义，其它情况下此参数无效。
        /// 指定 &#x60;ids&#x60; 查询时，此参数无效。
        /// 
        ///</summary>
        public   bool Offline{ get; set; }
        ///<summary>
        /// 根据镜像的操作系统发行版查询。
        /// 取值范围：&#x60;Ubuntu、CentOS、Windows Server&#x60;。
        /// 
        ///</summary>
        public   string Platform{ get; set; }
        ///<summary>
        /// 指定镜像ID查询，如果指定了此参数，其它参数可以不传。
        /// 
        ///</summary>
        public List<string> Ids{ get; set; }

        ///<summary>
        /// 根据镜像名称模糊查询。
        ///</summary>
        public   string ImageName{ get; set; }
        ///<summary>
        /// 根据镜像支持的系统盘类型查询。支持范围：&#x60;localDisk&#x60; 本地系统盘镜像；&#x60;cloudDisk&#x60; 云盘系统盘镜像。
        ///</summary>
        public   string RootDeviceType{ get; set; }
        ///<summary>
        /// 根据镜像的使用权限查询，可选参数，仅当 &#x60;imageSource&#x60; 为 &#x60;private&#x60; 时有效。取值范围：
        /// &#x60;all&#x60;：没有限制，所有人均可以使用。
        /// &#x60;specifiedUsers&#x60;：只有共享用户可以使用。
        /// &#x60;ownerOnly&#x60;：镜像拥有者自己可以使用。
        /// 
        ///</summary>
        public   string LaunchPermission{ get; set; }
        ///<summary>
        /// 根据镜像状态查询。参考 [镜像状态](https://docs.jdcloud.com/virtual-machines/api/image_status)
        ///</summary>
        public   string Status{ get; set; }
        ///<summary>
        /// 已废弃。
        ///</summary>
        public   string ServiceCode{ get; set; }
        ///<summary>
        /// CPU架构。支持范围：&#x60;x86_64&#x60;、&#x60;aarch64&#x60;。
        ///</summary>
        public   string Architecture{ get; set; }
        ///<summary>
        /// 页码；默认为1。
        ///</summary>
        public   int? PageNumber{ get; set; }
        ///<summary>
        /// 分页大小；&lt;br&gt;默认为20；取值范围[10, 100]。
        ///</summary>
        public   int? PageSize{ get; set; }
        ///<summary>
        /// 地域ID。
        ///Required:true
        ///</summary>
        [Required]
        [JsonProperty("regionId")]
        public   string RegionIdValue{ get; set; }
    }
}